﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;

namespace YemekteyizLib.Bs
{

    public class UyeProvider
    {
        /// <summary>
        /// Üye girişi yapıldığı sırada kullanılacak metot. Null dönebilir, null dönerse kullanıcı adı veya şifre yanlış demektir.
        /// </summary>
        /// <param name="kullaniciAdi"></param>
        /// <param name="sifre"></param>
        /// <returns></returns>
        public static Uye Giris(string kullaniciAdi, string sifre)
        {
            SqlCommand cmd = new SqlCommand("select UyeID, Adi,Soyadi,KullaniciAdi,Sifre,Email,AktifMi,OlusturulmaTarihi,TurID from Uyeler where KullaniciAdi=@Kadi and Sifre=@sifre");
            cmd.Parameters.AddWithValue("@Kadi", kullaniciAdi);
            cmd.Parameters.AddWithValue("@sifre", sifre);

            cmd.Connection = Tools.GetConnection();
            SqlDataReader rdr = cmd.ExecuteReader();
            int uyeTurID = 0;
            if (rdr.HasRows)
            {
                rdr.Read();
                Uye u = new Uye();
                u.ID = rdr.GetInt32(0); ;
                u.Adi = rdr[1].ToString();
                u.Soyadi = rdr[2].ToString();
                u.KullaniciAdi = rdr[3].ToString();
                u.Sifre = rdr.GetString(4);
                u.Email = rdr.GetString(5);
                u.AktifMi = rdr.GetBoolean(6);
                u.UyeOlusumTarihi = rdr.GetDateTime(7);
                uyeTurID = rdr.GetInt32(8);
                Tools.CloseConnection();
                u.UyeninTuru = UyeTurProvider.GetByID(uyeTurID);
                return u;
            }
            Tools.CloseConnection();
            return null;
        }

        /// <summary>
        /// Sepete urun eklerken, siparişi onaylarken kullanılabilecek metotdur
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public static Uye GetByID(int id)
        {
            SqlCommand cmd = new SqlCommand("select Adi,Soyadi,KullaniciAdi,Sifre,Email,AktifMi,OlusturulmaTarihi,TurID from Uyeler where UyeID=@ID");
            cmd.Parameters.AddWithValue("@ID", id);

            cmd.Connection = Tools.GetConnection();
            SqlDataReader rdr = cmd.ExecuteReader();

            Uye u = new Uye();

            int uyeTurID = 0;

            if (rdr.HasRows)
            {
                rdr.Read();
                u.ID = id;
                u.Adi = rdr[0].ToString();
                u.Soyadi = rdr[1].ToString();
                u.KullaniciAdi = rdr[2].ToString();
                u.Sifre = rdr.GetString(3);
                u.Email = rdr.GetString(4);
                u.AktifMi = rdr.GetBoolean(5);
                u.UyeOlusumTarihi = rdr.GetDateTime(6);
                uyeTurID = rdr.GetInt32(7);
            }

            Tools.CloseConnection();

            u.UyeninTuru = UyeTurProvider.GetByID(uyeTurID);

            return u;
        }

        /// <summary>
        /// Kayıt sayfası için kullanılacak metotdur.
        /// </summary>
        /// <param name="u"></param>
        /// <returns></returns>
        public static void UyeEkle(Uye u)
        {
            SqlCommand cmd = new SqlCommand("insert into Uyeler (Adi,Soyadi,KullaniciAdi,Sifre,Email,AktifMi,OlusturulmaTarihi,TurID,AktivasyonKodu) values (@Adi,@Soyadi,@KAdi,@Sifre,@Email,@AktifMi,@Tarih,@TurID,@AktifKodu)");

            cmd.Parameters.AddWithValue("@Adi", u.Adi);
            cmd.Parameters.AddWithValue("@Soyadi", u.Soyadi);
            cmd.Parameters.AddWithValue("@KAdi", u.KullaniciAdi);
            cmd.Parameters.AddWithValue("@Email", u.Email);
            cmd.Parameters.AddWithValue("@Sifre", u.Sifre);
            cmd.Parameters.AddWithValue("@AktifMi", false);
            cmd.Parameters.AddWithValue("@Tarih", DateTime.Now.Date);
            cmd.Parameters.AddWithValue("@TurID", YetkiDuzeyleri.NormalUye);
            Guid g = Guid.NewGuid();
            cmd.Parameters.AddWithValue("@AktifKodu", g.ToString());

            cmd.Connection = Tools.GetConnection();

            cmd.ExecuteNonQuery();

            cmd.Connection.Close();

            //#warning Aktivasyon Kodu mail atılmalı.

        }
        /// <summary>
        /// Üyenin kendisi ya da admin üyenin profil bilgilerini düzenlerken kullanılacaktır.
        /// </summary>
        /// <param name="u"></param>
        /// <returns></returns>
        public static int UyeDuzenle(Uye u)
        {
            SqlCommand cmd = new SqlCommand("update Uyeler set Adi=@A,Soyadi=@S,KullaniciAdi=@KAdi,Sifre=@Sifre,Email=@E,AktifMi=@AktifMi,Tarih=@T,UyeTurID=@ID where UyeID=@UyeID");

            cmd.Parameters.AddWithValue("@A", u.Adi);
            cmd.Parameters.AddWithValue("@S", u.Soyadi);
            cmd.Parameters.AddWithValue("@KAdi", u.KullaniciAdi);
            cmd.Parameters.AddWithValue("@Sifre", u.Sifre);
            cmd.Parameters.AddWithValue("@E", u.Email);
            cmd.Parameters.AddWithValue("@AktifMi", u.AktifMi);
            cmd.Parameters.AddWithValue("@T", u.UyeOlusumTarihi);
            cmd.Parameters.AddWithValue("@ID", u.UyeninTuru.ID);
            cmd.Parameters.AddWithValue("@UyeID", u.ID);

            cmd.Connection.Open();
            cmd.ExecuteNonQuery();
            cmd.Connection.Close();

            return 1;

        }

        /// <summary>
        /// Admin üye silerken kullanılacaktır.
        /// </summary>
        /// <param name="u"></param>
        /// <returns></returns>
        public static void UyeSil(Uye u)
        {
            SqlCommand cmd = new SqlCommand("delete Uyeler where UyeID=@UyeID");
            cmd.Parameters.AddWithValue("@UyeID", u.ID);

            cmd.Connection.Open();
            cmd.ExecuteNonQuery();
            cmd.Connection.Close();

        }



        /// <summary>
        /// Admin sayfası içindir.
        /// </summary>
        /// <returns></returns>
        public static List<Uye> GetAll()
        {
            SqlCommand cmd = new SqlCommand("select * from uyeler");
            cmd.Connection = Tools.GetConnection();
            List<Uye> donecek = new List<Uye>();
            SqlDataReader rdr = cmd.ExecuteReader();
            List<int> uyeTurIDler = new List<int>();
            if (rdr.HasRows)
            {
                Uye u = new Uye();
                u.ID = rdr.GetInt32(0); ;
                u.Adi = rdr[1].ToString();
                u.Soyadi = rdr[2].ToString();
                u.KullaniciAdi = rdr[3].ToString();
                u.Sifre = rdr.GetString(4);
                u.Email = rdr.GetString(5);
                u.AktifMi = rdr.GetBoolean(6);
                u.UyeOlusumTarihi = rdr.GetDateTime(7);
                uyeTurIDler.Add(rdr.GetInt32(8));
                Tools.CloseConnection();
                
                donecek.Add(u);
            }
            Tools.CloseConnection();

            for (int i = 0; i < donecek.Count; i++)
            {
                donecek[i].UyeninTuru = UyeTurProvider.GetByID(uyeTurIDler[i]);
            }


            return donecek;
        }

    }
}
